package the_fourth_chapter;

/**
 * 冒泡排序法首先将一组无序的数字排成一排，再从左端开始将相邻两个数字进行比较，如果左边的数字比右边的数字大，
 * 则交换位置。一轮比较完成后，最大的数字会在数列最后的位置上“冒出”。重复比较和交换未排序的数字，直到全部数字冒出
 * 
 * 冒泡排序的实现 从第一个元素开始，如果第一个元素大于后面元素，则向后移， 比较一轮 一轮下来，
 * 第一个元素为最小的元素或者最后一个元素为最大元素，而后从第二个元素循环
 * 
 * @author explorati
 *
 */
public class M_Sort {

	// 从第一个数开始，若前一个比后一个大就互换位置，先确定最后元素
	public static int[] Max_Bubbling_Srot(int[] nums) {
		int temp;
		// 每轮最大的数值在最后冒出来
		for (int i = nums.length - 1; i > 0; i--) {
			for (int j = 0; j < i; j++) {
				if (nums[j] > nums[j + 1]) {
					temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
				}
			}
		}
		return nums;
	}

	// 先确定最小的(第一个数和后面每个数都对比)，然后确定第二小的
	public static int[] Min_Bubbling_Sort(int[] nums) {
		int temp;
		for (int i = 0; i < nums.length - 1; i++) {
			for (int j = i; j < nums.length - 1; j++) {
				if (nums[i] > nums[j + 1]) {
					temp = nums[i];
					nums[i] = nums[i + 1];
					nums[i + 1] = temp;
				}
			}
		}
		return nums;
	}

	public static void main(String[] args) {
		int[] nums = { 5, 4, 3, 6, 6, 1, 7, 2 };
		System.out.println("未排序的数组为：");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}

		System.out.println();

		int[] num = Max_Bubbling_Srot(nums);

		System.out.println("冒泡排序后的数组为：");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(num[i] + "\t");
		}
	}
}
